/*
 * Valida.java
 * @author Roberto Corona
 */
package utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Esta clase provee de metodos para validar que las cadenas de sus parametros
 * representan a datos de los tipos especificados por el metodo
 */
public class Valida {

    public boolean cadenaVacia(Object obj) {
        if (obj != null) {
            if (((String) obj).trim().length() == 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return true;
        }
    }

    public boolean validarExpresion(CharSequence input, String regExp) {
        Pattern pattern = Pattern.compile(regExp);
        // Crea un comparador para comparar la cadena contra el patrón
        Matcher matcher = pattern.matcher(input);
        // Si la cadena se ajusta al patrón
        if (matcher.matches()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Valida si la cadena s que contiene 3 letras y 4 numeros
     *
     * @param s Cadena a verificar
     * @return True si la cadena representa un entero, false en caso contrario.
     */
    public boolean validaClave(String s) {
        return validarExpresion(s.trim(), "^[a-z A-Z]{3}[0-9]{4}$");
    }

    /**
     * Valida si la cadena s representa el nombre de un producto 35 caracteres
     * de longitud.
     *
     * @param s Cadena a verificar
     * @return True si la cadena representa un entero, false en caso contrario.
     */
    public boolean validaCadena(int numCaracteres, String s) {
        if (s.trim().length() <= numCaracteres) {
            return validarExpresion(s.trim(), "^[a-z A-Z 0-9]{1,35}$");
        } else {
            return false;
        }
    }

    /**
     * Valida si la cadena s representa el tipo de producto que sera una E o G
     *
     * @param s Cadena a verificar
     * @return True si la cadena representa un entero, false en caso contrario.
     */
    public boolean validaCaracter(String s) {
        return validarExpresion(s.trim(), "^(E|G|e|g){1}$");
    }

    /**
     * Valida si la cadena s representa la fecha en formato DD/MM/AAAA
     *
     * @param s Cadena a verificar
     * @return True si la cadena representa un entero, false en caso contrario.
     */
    public boolean validaFecha(String s) {
        return validarExpresion(s.trim(), "^(0[1-9]|[12][0-9]|3[01])[-/](0[1-9]|1[012])[-/](19|20)\\d\\d$");
    }

    /**
     * Valida si la cadena s representa un valor de tipo flotante
     *
     * @param s Cadena a verificar
     * @return True si la cadena representa un entero, false en caso contrario.
     */
    public boolean validaFlotante(String s) {
        return validarExpresion(s.trim(), "[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?");
    }
}